#ifndef __KEYBOARD_H_
#define __KEYBOARD_H_
#include <Arduino.h>
// http://m.eeworld.com.cn/bbs_thread-1221726-1-1.html  蓝牙键盘资料

#include "BleKeyboard.h"

typedef enum
{
      KEY_DOWN_X2Y1 = 1,
      KEY_DOWN_X2Y2,
      KEY_DOWN_X2Y3,
      KEY_DOWN_X2Y4,
      KEY_DOWN_X3Y1,
      KEY_DOWN_X3Y2,
      KEY_DOWN_X3Y3,
      KEY_DOWN_X3Y4,
      KEY_DOWN_X4Y1,
      KEY_DOWN_X4Y2,
      KEY_DOWN_X4Y3,
      KEY_DOWN_X4Y4,
      KEY_DOWN_X5Y2,
      KEY_DOWN_X5Y3,
      KEY_DOWN_X5Y4,
      KEY_DOWN_X6Y3,
      KEY_DOWN_X6Y4,

      KEY_DOWN_X1Y2, // 快捷软件启动
      KEY_DOWN_X1Y3,
      KEY_DOWN_X1Y4,

      KEY_DOWN_X1Y5, // 音量调节开始
      KEY_DOWN_X2Y5,

      KEY_DOWN_X3Y5, // 台灯控制开始
      KEY_DOWN_X4Y5,
      KEY_DOWN_X5Y5,
      KEY_DOWN_X6Y5,

      KEY_DOWN_X7Y2, // 桌面电源控制
      KEY_DOWN_X7Y3,
      KEY_DOWN_X7Y4,
      KEY_DOWN_X7Y5,

      // 单击抬起
      KEY_UP_X2Y1,
      KEY_UP_X2Y2,
      KEY_UP_X2Y3,
      KEY_UP_X2Y4,
      KEY_UP_X3Y1,
      KEY_UP_X3Y2,
      KEY_UP_X3Y3,
      KEY_UP_X3Y4,
      KEY_UP_X4Y1,
      KEY_UP_X4Y2,
      KEY_UP_X4Y3,
      KEY_UP_X4Y4,
      KEY_UP_X5Y2,
      KEY_UP_X5Y3,
      KEY_UP_X5Y4,
      KEY_UP_X6Y3,
      KEY_UP_X6Y4,

      KEY_UP_X1Y2, // 快捷软件启动
      KEY_UP_X1Y3,
      KEY_UP_X1Y4,

      KEY_UP_X1Y5, // 音量调节结束
      KEY_UP_X2Y5,

      KEY_UP_X3Y5, // 台灯控制结束
      KEY_UP_X4Y5,
      KEY_UP_X5Y5,
      KEY_UP_X6Y5,

      KEY_UP_X7Y2, // 桌面电源控制
      KEY_UP_X7Y3,
      KEY_UP_X7Y4,
      KEY_UP_X7Y5,

      KEY_DOWN_X1Y1, // 按下提示
      KEY_DOWN_X7Y1, // 按下提示
      KEY_UP_X1Y1,   // 映射表切换
      KEY_UP_X7Y1,   // dial/lvgl切换

      // 双按键按下
      DOUB_KEY_DOWN_X2Y1,
      DOUB_KEY_DOWN_X2Y2,
      DOUB_KEY_DOWN_X2Y3,
      DOUB_KEY_DOWN_X2Y4,
      DOUB_KEY_DOWN_X3Y1,
      DOUB_KEY_DOWN_X3Y2, // 上一首歌曲
      DOUB_KEY_DOWN_X3Y3,
      DOUB_KEY_DOWN_X3Y4,
      DOUB_KEY_DOWN_X4Y1,
      DOUB_KEY_DOWN_X4Y2,
      DOUB_KEY_DOWN_X4Y3,
      DOUB_KEY_DOWN_X4Y4,
      DOUB_KEY_DOWN_X5Y2, // 下一首歌曲
      DOUB_KEY_DOWN_X5Y3,
      DOUB_KEY_DOWN_X5Y4,
      DOUB_KEY_DOWN_X6Y3, // 音乐暂停/开始
      DOUB_KEY_DOWN_X6Y4,

      DOUB_KEY_DOWN_X1Y2,
      DOUB_KEY_DOWN_X1Y3,
      DOUB_KEY_DOWN_X1Y4,

      DOUB_KEY_DOWN_X1Y5,
      DOUB_KEY_DOWN_X2Y5,

      DOUB_KEY_DOWN_X3Y5,
      DOUB_KEY_DOWN_X4Y5,
      DOUB_KEY_DOWN_X5Y5,
      DOUB_KEY_DOWN_X6Y5,

      DOUB_KEY_DOWN_X7Y2,
      DOUB_KEY_DOWN_X7Y3,
      DOUB_KEY_DOWN_X7Y4,
      DOUB_KEY_DOWN_X7Y5,

      // 双按键抬起
      DOUB_KEY_UP_X2Y1, // 无
      DOUB_KEY_UP_X2Y2,
      DOUB_KEY_UP_X2Y3,
      DOUB_KEY_UP_X2Y4,
      DOUB_KEY_UP_X3Y1,
      DOUB_KEY_UP_X3Y2,
      DOUB_KEY_UP_X3Y3,
      DOUB_KEY_UP_X3Y4,
      DOUB_KEY_UP_X4Y1,
      DOUB_KEY_UP_X4Y2,
      DOUB_KEY_UP_X4Y3,
      DOUB_KEY_UP_X4Y4,
      DOUB_KEY_UP_X5Y2,
      DOUB_KEY_UP_X5Y3,
      DOUB_KEY_UP_X5Y4,
      DOUB_KEY_UP_X6Y3,
      DOUB_KEY_UP_X6Y4,

      DOUB_KEY_UP_X1Y2, // 映射表指定切回至默认映射表
      DOUB_KEY_UP_X1Y3, // 映射表指定切回至数字映射表
      DOUB_KEY_UP_X1Y4, // 映射表指定切回至APP映射表

      DOUB_KEY_UP_X1Y5, // 一键休眠
      DOUB_KEY_UP_X2Y5, // 一键开启

      DOUB_KEY_UP_X3Y5,
      DOUB_KEY_UP_X4Y5,
      DOUB_KEY_UP_X5Y5,
      DOUB_KEY_UP_X6Y5,

      DOUB_KEY_UP_X7Y2,
      DOUB_KEY_UP_X7Y3,
      DOUB_KEY_UP_X7Y4,
      DOUB_KEY_UP_X7Y5
};

// 键盘映射表
typedef enum
{
      KEY_FAST_MAP, // 默认映射表
      KEY_NUM_MAP,  // 数字映射表
      KEY_APP1_MAP  // 快捷映射表
};
extern uint8_t key_fast_map[17][3];
extern uint8_t key_num_map[17][3];
extern uint8_t key_app1_map[17][3];
extern uint8_t key_doub_map[17][3];

typedef enum
{
      KNOB_DIAL,
      KNOB_LVGL
};

void keyboard_init(void *pvParameters);
void dict_key(int anger);
void dict_press();
void dict_release();

void computer_open(); // 电脑开机
void computer_open1();
#endif